/*
 * app_key_value.c
 *
 *  Created on: 2023年7月22日
 *      Author: mcealt_DS
 * upload
 * RFM -> HUB  CMD：0x04 节点实时事件上报   event
 * RFM -> HUB  CMD：0x05 节点周期心跳 需包含自身外设输入状态    heartbeat
 * RFM <- HUB  CMD：0x06 网关应答上报  ack_event
 * RFM <- HUB  CMD：0x07 网关应答心跳  ack_heartbeat
 */
#include "app_key_value.h"
#include "app_log.h"
typedef enum
{
    STEP_PANEL_TO_HUB,
    STEP_HUB_REC_TO_RBF,
    STEP_RFM_TO_HUB_UP,
    STEP_HUB_REC_TO_PANEL,
    STEP_FINISH,
} app_key_value_test_step_t;

static app_key_value_test_step_t step = STEP_PANEL_TO_HUB;

static uint8_t packet[256];
static uint8_t size = 0;

keyValue_t test_key_value[] = {
    {
    .id = APP_KEY_VALUE_ID_SPVN_SLOT_TIME,
    .valueSize = 4,
    .value = {0x01, 0x02, 0x03, 0x04},
    },
    {
    .id = APP_KEY_VALUE_ID_GLOBAL_SLOT_MALLOC,
    .valueSize = 3,
    .value = {0xA1, 0xA2, 0xA3},
    },
    {
    .id = APP_KEY_VALUE_ID_GROUP_IDX,
    .valueSize = 1,
    .value = {0xFF},
    },
};
keyValue_t rec_key_value;

void app_key_value_test(void)
{
    uint8_t ret;
    switch (step)
    {
    case STEP_PANEL_TO_HUB:
    {
        app_key_value_init();
        uint8_t key_value_num = sizeof(test_key_value) / sizeof(keyValue_t);
        for(int i=0; i < key_value_num; i++)
            set_key_value(&test_key_value[i]);
        app_key_value_pack(packet, &size);
        DS_app_log_debug("PANEL_TO_HUB(%d):", size);
        debug_printf_hex( packet, size);
        step++;
    }
    break;
    case STEP_HUB_REC_TO_RBF:
    {
        app_key_value_unpack(packet, size);
        DS_app_log_debug("HUB_REC_TO_RBF:\r\n");

        for (; APP_KEY_VALUE_NO_ERR == get_key_value(&rec_key_value);)
        {
            APP_PRINTF("id:%02X ", rec_key_value.valueSize, rec_key_value.id);
            debug_printf_hex( rec_key_value.value, rec_key_value.valueSize);
        }
        step++;
    }
    break;
    case STEP_RFM_TO_HUB_UP:
    {
    }
    break;
    case STEP_HUB_REC_TO_PANEL:
    {
    }
    break;
    case STEP_FINISH:
    {
    }
    break;
    default:
        break;
    }
}
